@[TOC](Redis 的Java 客户端笔记整理)
开启远程连接
redis 默认不支持远程连接,需手启:
修改地方 (找到 config)
- 把 bind:127.0.0.1 注释掉
- 密码校验开启 (去掉 requirepass 注解 在 vim 搜索:/requirepass,加上自己的密码)
ok 保存退出启redis。
Jedis (maven 篇) 基本使用
Jedis的Github地址:https://github.com/redis/jedis
1、创建 maven 项目,添加Jedis依赖:
<dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>3.3.0</version> <type>jar</type> <scope>compile</scope> </dependency>
|
创建测试方法:
public class MyJedis { public static void main(String[] args) { Jedis jedis = new Jedis("192.168.1.132",6379); jedis.auth("java"); String ping = jedis.ping(); System.out.println(ping);
} }
|
启动 main 方法,输出 PONG 则成功。
在 Jedis 中,由于方法的API 与 redis 命令高度一致。直接使用即可。
连接池
在实际应用中,Jedis 实例我们一般是通过连接池来获取,由于 Jedis 对象不是线程安全的,所以当我们使用 Jedis 对象时,从连接池获取 Jedis ,使用完成后,再还给连接池。
public class JedisPoolTest { public static void main(String[] args) { Jedis jedis = null; JedisPool pool = new JedisPool("192.168.1.132", 6379); jedis = pool.getResource(); jedis.auth("javaboy"); try { String ping = jedis.ping(); System.out.println(ping); } catch (Exception e) { e.printStackTrace(); } finally { if (jedis != null) { jedis.close(); } } } }
|
进一步改进:
public class Redis { private JedisPool pool;
public Redis(){ GenericObjectPoolConfig config = new GenericObjectPoolConfig(); config.setMaxIdle(300); config.setMaxTotal(1000); config.setMaxWaitMillis(30000); config.setTestOnBorrow(true);
pool= new JedisPool(config,"192.168.1.132",6379,30000,"javaboy");
}
public void execute(CallwithJedis callwithJedis){ try(Jedis jedis = pool.getResource()){ callwithJedis.call(jedis); } } }
|
public interface CallwithJedis { void call(Jedis jedis); }
|
public class JedisPoolTest { public static void main(String[] args) { Redis redis = new Redis(); redis.execute(jedis -> { System.out.println(jedis.ping()); }) } }
|
Lettuce
Lettuce 和 Jedis 的区别:
- Jedis 在实现的过程中是直接连接 Redis 的,在多个线程之间共享一个 Jedis 实例,这是线程不安全的,如果想在多线程场景下使用 Jedis,就得使用连接池,这样每个连接池都有自己的 Jedis 实例。
- Lettuce 基于 Netty NIO 框架来构建,所以克服了 Jedis 中线程不安全的问题, Lettuce 支持同步、异步以及响应式调用,多个线程可以共享一个连接实例。
使用 Lettuce ,首先创建一个 Maven 项目,添加 Lettuce 依赖:
<dependency> <groupId>io.lettuce</groupId> <artifactId>lettuce-core</artifactId> <version>5.2.2.RELEASE</version> </dependency>
|
简单测试:
public class LettuceTest { public static void main(String[] args) { RedisClient redisClient = RedisClient.create("redis://javaboy@192.168.1.132"); StatefulRedisConnection<String, String> connect = redisClient.connect(); RedisCommands<String, String> sync = connect.sync(); sync.set("name","lisi"); String name = sync.get("name"); System.out.println(name); } }
|